///*
// * To change this template, choose Tools | Templates
// * and open the template in the editor.
// */
//package com.google.code.jmarias.server;
//
//import java.util.*;
//
///**
// * abstraktni trida, ze ktere budou pomocne tridy dedit metody, abychom zabranili duplicite kodu
// * @author josef
// */
//public abstract class Aid {
//
//    /**
//     * Najde kartu ze zdvihu, kterou musi hrac prelezt
//     * popripade hraci urci, jakou kartou musi hrat
//     * @param lift Zdvih, ve kterem kartu hleda
//     * @param hand Ruka hrace - bohuzel, pro kontrolu spravnosti pravidel nutno koukat hraci do ruky
//     * @param liftColor barva zdvihu, tj. barva, kterou ma prvni karta zdvihu
//     * @param trumphColor barva trumfu
//     * @return kartu, kterou je nutno prelezt / null pokud je jedno, cim bude hrat
//     */
//    public CardObsolete findHighestCard(List<CardObsolete> lift, Set<CardObsolete> hand, Color trumphColor) {
//        Color liftColor = lift.get(0).getColor();
//        //pokud vynasejici hrac vyjel trumfem
//        if (liftColor == trumphColor) {
//            return getHighestCard(lift, trumphColor);
//        }
//        //pokud vynasejici nevyjel trumfem
//        if (trumphsInLift(lift, trumphColor)) { //pokud ale ve zdvihu jiz je trumf
//            if (hasColor(hand, liftColor)) { //v tomto pripade nemusi hrac jit vys, protoze uz jsou ve zdvihu trumfy
//                return new CardObsolete(6, liftColor); //vracime hypotetickou sestku
//            } else if (hasColor(hand, trumphColor)) {
//                //musi prelezt nejvyssi trumf
//                return getHighestCard(lift, trumphColor);
//            } else { //nema ani barvu ani trumfy, tudiz neni co prelezat
//                return null;
//            }
//        } else { //pokud ve zdvihu jeste neni trumf
//            if (hasColor(hand, liftColor)) {
//                //ve zdvihu nejsou trumfy a proto zalezi na nejvyssi karte
//                if (hasHigherCard(hand, getHighestCard(lift, liftColor))) {
//                    return getHighestCard(lift, liftColor); //ma vys, takze musi vys
//                } else { //nema vys, takze vratime hypotetickou sesku
//                    return new CardObsolete(6, liftColor);
//                }
//
//            } else if (hasColor(hand, trumphColor)) { //vrati hypotetickou trumfovou sestku, aby hrac videl, ze musi jet trumfem
//                return new CardObsolete(6, trumphColor);
//            } else {
//                return null; //nezalezi na tom, cim hrajeme
//            }
//        }
//    }
//
//    /**
//     * projede
//     * @param mnozinu karet a najde v ni nejvyssi kartu dane barvy
//     * @param wantedColor
//     * @return
//     */
//    public CardObsolete getHighestCard(List<CardObsolete> lift, Color wantedColor) {
//        int maxValue = 0;
//        CardObsolete highCard = null;
//        for (CardObsolete card : lift) {
//            if (card.getColor() == wantedColor && card.getCommonValue() > maxValue) {
//                highCard = card;
//            }
//        }
//        return highCard;
//    }
//
//    /**
//     * zjisti, zda jsou ve zdvihu trumfy
//     * @param lift zdvih, ve kterem hledame
//     * @param trumphColor barva trumfu
//     * @return true pokud ve zdvihu trumfy jsou, false pokud ne
//     */
//    public boolean trumphsInLift(List<CardObsolete> lift, Color trumphColor) {
//        for (CardObsolete card : lift) {
//            if (card.getColor() == trumphColor) {
//                return true;
//            }
//        }
//        return false;
//    }
//
//    /**
//     * zjisti, zda hrac ma danou barvu karet
//     * @param hand ruka hrace, kam je bohuzel nutno koukat
//     * @param color barva, kterou hledame
//     * @return true pokud barvu ma, false pokud ne
//     */
//    public boolean hasColor(Set<CardObsolete> hand, Color color) {
//        for (CardObsolete card : hand) {
//            if (card.getColor() == color) {
//                return true;
//            }
//        }
//        return false;
//    }
//
//    public boolean hasHigherCard(Set<CardObsolete> hand, CardObsolete card) {
//        for (CardObsolete cardE : hand) {
//            if (cardE.isHigherCardMarias(card)) {
//                return true;
//            }
//        }
//        return false;
//    }
//
//    public Set<CardObsolete> getHigherCards(Set<CardObsolete> hand, CardObsolete card) {
//        Set<CardObsolete> higherCards = new HashSet<CardObsolete>();
//        for (CardObsolete cardE : hand) {
//            if (cardE.isHigherCardMarias(card)) {
//                higherCards.add(cardE);
//            }
//        }
//        return higherCards;
//    }
//}
